From 8273c817576fe7d38ffb2f9b600abbb7e42b2940 Mon Sep 17 00:00:00 2001 From: Debian Haskell Group Date: Tue, 27 Jun 2017 12:50:03 +0100 Subject: [PATCH] reproducible-tmp-names This is an attempt to make GHC build reproducible. The name of .c files may end up in the resulting binary (in the debug section), but not the directory. Instead of using the process id, create a hash from the command line arguments, and assume that is going to be unique. Gbp-Pq: Name reproducible-tmp-names --- compiler/main/SysTools.hs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/compiler/main/SysTools.hs b/compiler/main/SysTools.hs index 1ab5b138..39f0d64e 100644 --- a/compiler/main/SysTools.hs +++ b/compiler/main/SysTools.hs @@ -65,6 +65,7 @@ import Platform import Util import DynFlags import Exception +import Fingerprint import LlvmCodeGen.Base (llvmVersionStr, supportedLlvmVersion) @@ -1145,8 +1146,8 @@ getTempDir dflags = do mapping <- readIORef dir_ref case Map.lookup tmp_dir mapping of Nothing -> do - pid <- getProcessID - let prefix = tmp_dir "ghc" ++ show pid ++ "_" + pid <- getStableProcessID + let prefix = tmp_dir "ghc" ++ pid ++ "_" mask_ $ mkTempDir prefix Just dir -> return dir where @@ -1562,6 +1563,13 @@ getProcessID :: IO Int getProcessID = System.Posix.Internals.c_getpid >>= return . fromIntegral #endif +-- Debian-specific hack to get reproducible output, by not using the "random" +-- pid, but rather something determinisic +getStableProcessID :: IO String +getStableProcessID = do + args <- getArgs + return $ take 4 $ show $ fingerprintString $ unwords args + -- Divvy up text stream into lines, taking platform dependent -- line termination into account. linesPlatform :: String -> [String] -- 2.30.2